<?php

namespace app\common;

/**
 * API控制器基类
 */
class Image
{
    public static function compressImg($src,$percent = 1,$ratio = 100,$path=''){
        // 获取图片的宽高，类型,宽高字符串“height="yyy" width="xxx"”
        // $type 1 = GIF，2 = JPG，3 = PNG，4 = SWF，5 = PSD，6 = BMP......
        $src = '.'.ltrim($src,'.');
        // 直接返回路径
        if (!getimagesize($src)){
            return ltrim($src,'.');
        }
        list($width, $height, $type, $attr) = getimagesize($src);
        //image_type_to_extension取得图像类型的文件后缀,是否在后缀名前加一个点。默认是 TRUE。
        $imageInfo = [
            'width'=>$width,
            'height'=>$height,
            'type'=>image_type_to_extension($type,false),
            'attr'=>$attr
        ];
        // imagecreatefrom系列函数用于从文件或 URL 载入一幅图像。
        $fun   = "imagecreatefrom".$imageInfo['type'];
        $image = @$fun($src);
        if (!$image){
            return ltrim($src,'.');
        }
        // 新图的宽高，缩放比例
        $newWidth = $imageInfo['width'] * $percent;
        $newHeight = $imageInfo['height'] * $percent;
        // 建立的是一幅大小为 x和 y的黑色图像(默认为黑色)，如想改变背景颜色则需要用填充颜色函数imagefill($img,0,0,$color);
        $imageThump = imagecreatetruecolor($newWidth,$newHeight);
        // 将一幅图像中的一块正方形区域拷贝到另一个图像中，平滑地插入像素值，因此，尤其是，减小了图像的大小而仍然保持了极大的清晰度。
        imagecopyresampled($imageThump,$image,0,0,0,0,$newWidth,$newHeight,$width,$height);
        // 压缩后的图片的命名，以及回存路径
        if (!empty($path)){
            $filePath = $path;
        }else{
            $filePath = substr($src,0,strrpos($src,'/'));
        }
        $filePath = $filePath.'/'.rand(1111, 9999).substr(strrchr($src,'/'),1);
        // IOS 图片旋转问题
        // 1:0°,6:顺时针90°, 8:逆时针90°,3:180°
        // 生成图片
        imagejpeg($imageThump,$filePath,$ratio);
        // 销毁
        imagedestroy($imageThump);
        imagedestroy($image);
        return ltrim($filePath,'.');
    }
}